跳到主要内容

4.8 FM模块

RDA5807M(这里简称为FM)是一款基于CMOS(互补金属氧化物半导体)工艺、单芯片、低功耗的FM广播立体声调谐芯片,支持50MHz--115MHz的频率范围,音频输出最大负载为32Ω。我们通过这个FM模块实现传统的收音机效果。

(1)介绍与准备

RDA5807是控制RDA5807器件的库,在Arduino IDE导航栏中点击“项目” —“导入库” —“管理库”,输入“RDA5807”,查找选择最新版本进行安装。

alt text
图4.8.1 安装RDA5807库

(2)实验代码

#include<Arduino.h>
#include<RDA5807.h> //FM收音
#include<Wire.h>

//I2C引脚
#define ESP32_I2C_SDA 5
#define ESP32_I2C_SCL 4

RDA5807 rx;

void setup() {
Wire.begin(ESP32_I2C_SDA, ESP32_I2C_SCL);
rx.setup();
rx.setVolume(5);
delay(500);
rx.setFrequency(9180);//FM
rx.setRDS(true);

//通道模式
pinMode(41, OUTPUT); //低电平为关闭喇叭输出,高电平为打开喇叭输出
pinMode(42, OUTPUT); //低电平为FM输入,高电平为ESP32的Io的输入
}

uint8_t modelsign = 1; //设置状态标志位

void loop() {
selectDevice(modelsign);
}

//模式切换
void selectDevice(uint8_t dev) {
if (dev == 0) {//喇叭关闭,ESP32的IO输出打开
digitalWrite(41, LOW);
digitalWrite(42, HIGH);
}
if (dev == 1) {//喇叭关闭,FM输出打开
digitalWrite(41, LOW);
digitalWrite(42, LOW);
}
if (dev == 2) {//喇叭打开,FM输出打开
digitalWrite(41, HIGH);
digitalWrite(42, HIGH);
}
}

(4)实验讲解

表1.8 FM模块函数讲解
函数说明
Wire.begin(I2C_SDA, I2C_SCL)初始化Wire库,并以主机或从机身份加入I2C总线
rx.setVolume()设置输出的音量大小
rx.setFrequency()设置FM的接收频率

(4)实验现象

编译上传代码后,在喇叭上输出收音机的音频。